package com.itany.corejava.code09_集合.list集合;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
 * @author 石小俊
 * @date 2023年05月05日 14:07
 */
public class Test02_遍历 {

    public static void main(String[] args) {
        test03();
    }

    public static void test01() {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 3, 5, 6, 8, 9));
        System.out.println(list);
        // 升序遍历
        for (int i = 0; i < list.size(); i++) {
            Integer num = list.get(i);
            System.out.print(num + "\t");
            // 删除索引为偶数的元素
            if (i % 2 == 0) {
                // 此时存在漏删的情况
                // 1,3,5,6,8,9 --> 3,5,8,9
                // 当删除了第一个元素之后,其他元素的索引会随之改变
                // 1被删除,3的索引为0,5的索引为1,6的索引为2...
                // 由于索引0已经遍历过了,直接从1开始,再次删除索引为2的元素
                // 以此类推,因此存在删除元素有误的情况
                // 解决方案:将升序改为降序
                // list.remove(num);
            }

        }
        System.out.println();

        // 降序遍历
        for (int i = list.size() - 1; i >= 0; i--) {
            Integer num = list.get(i);
            System.out.print(num + "\t");
            if (i % 2 == 0) {
                list.remove(num);
            }
        }
        System.out.println("\n" + list);
    }

    public static void test02() {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 3, 5, 6, 8, 9));
        for (Integer num : list) {
            // list.add(10);
            // list.remove(num);
            list.set(2, 2);
        }
        System.out.println(list);
    }

    public static void test03() {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 3, 5, 6, 8, 9));
        // 创建Iterator迭代器,将集合中的数据在迭代器中进行迭代
        Iterator<Integer> it = list.iterator();
        // 通过hasNext方法判断是否存在下一个元素
        // 返回一个boolean类型的数据
        // 在进行遍历时,只要仍然存在下一个元素则继续迭代
        while (it.hasNext()) {
            // it.next()获取下一个迭代的元素
            Integer num = it.next();
            System.out.print(num + "\t");
            // 删除所有偶数的元素
            if (num % 2 == 0) {
                // list.add(11);
                // list.remove(num);
                // 通过迭代器删除当前迭代的元素
                it.remove();
            }
        }
        System.out.println("\n" + list);
    }
}
